home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1996 June
/
EnigmA AMIGA RUN 08 (1996)(G.R. Edizioni)(IT)[!][issue 1996-06][EARSAN CD VII].iso
/
earcd
/
comm1
/
intsdkss.lha
/
include
/
amitcptoiw225.h
next >
Wrap
C/C++ Source or Header
|
1996-04-09
|
3KB
|
188 lines
#ifndef AMITCP_TO_IW225
#define AMITCP_TO_IW225 1
#include <proto/socket.h>
#include <netinet/inetconfig.h>
#include <netinet/in.h>
#include <sys/syslog.h>
#define Syslog syslog
#define CloseSocket s_close
#define IoctlSocket s_ioctl
#define Errno s_errno
#define ObtainSocket(a1,a2,a3,a4) s_inherit ((void *) a1)
#define UNIQUE_ID (-1)
static __inline long
Dup2Socket (long fd1, long fd2)
{
if (fd2 == -1)
return s_dup (fd1);
return s_dup2 (fd1, fd2);
}
/*
** for ReleaseCopyOfSocket and ReleaseSocket(), the caller
** should be checking explicitly for -1, not for < 0. Otherwise,
** these can fail, if the memory on the user's machine is such
** that the negative bit (bit 31) is set...
*/
static __inline LONG
ReleaseCopyOfSocket (LONG fd, LONG id)
{
if (id == UNIQUE_ID)
{
int
newfd = s_dup (fd);
void
*val;
if (newfd >= 0)
{
val = s_release (newfd);
if (!val)
return -1;
return (LONG) val;
}
return -1;
}
return -1;
}
static __inline LONG
ReleaseSocket (LONG fd, LONG id)
{
if (id == UNIQUE_ID)
{
void
*val = s_release (fd);
if (!val)
return -1;
return (LONG) val;
}
return -1;
}
static __inline LONG
SetDTableSize (UWORD size)
{
if (size > FD_SETSIZE)
size = FD_SETSIZE;
ConfigureInet (INET_MaxSocks, size, TAG_DONE);
return size;
}
static __inline void
SetErrnoPtr (void *ptr, UBYTE size)
{
if (size != 4)
{
/* ?? */
return;
}
ConfigureInet (INET_Errno, ptr, TAG_DONE);
return;
}
static __inline int
countbits (unsigned long x)
{
x = (x & 0x55555555) + ((x >> 1) & 0x55555555);
x = (x & 0x33333333) + ((x >> 2) & 0x33333333);
x = (x & 0x0F0F0F0F) + ((x >> 4) & 0x0F0F0F0F);
x = (x & 0x00FF00FF) + ((x >> 8) & 0x00FF00FF);
x = (x & 0x0000FFFF) + ((x >>16) & 0x0000FFFF);
return (int) (x & 255);
}
static __inline int
findbit (unsigned long x)
{
int
i;
for (i = 31; i >= 0; i--)
{
if (x & (1 << i))
return i;
}
return -1;
}
static __inline void
SetSocketSignals (ULONG sigintrmask, ULONG sigiomask, ULONG sigurgmask)
{
int
sigio = findbit (sigiomask),
sigurg = findbit (sigurgmask);
if (countbits (sigintrmask) != 0)
syslog (LOG_WARNING, "Sigintrmask ignored 0x%lx", sigintrmask)
if (countbits (sigiomask) > 1)
syslog (LOG_WARNING, "Only most significant bit used in sigiomask 0x%lx", sigiomask);
if (countbits (sigurgmask) > 1)
syslog (LOG_WARNING, "Only most significant bit used in sigurgmask 0x%lx", sigurgmask);
ConfigureInet (INET_SignalIO, sigio, INET_SignalUrgent, sigurg, TAG_DONE);
return;
}
static __inline char *
Inet_NtoA (unsigned long addr)
{
struct in_addr
inaddr;
inaddr.s_addr = addr;
return inet_ntoa (inaddr);
}
static __inline unsigned long
Inet_MakeAddr (long net, long lna)
{
struct in_addr
inaddr = inet_makeaddr ((int) net, (int) lna);
return inaddr.s_addr;
}
static __inline long
Inet_LnaOf (unsigned long addr)
{
struct in_addr
inaddr;
inaddr.s_addr = addr;
return inet_lnaof (inaddr);
}
static __inline long
Inet_NetOf (unsigned long in)
{
struct in_addr
inaddr;
inaddr.s_addr = in;
return inet_netof (inaddr);
}
#endif /* AMITCP_TO_IW225 */